package com.learn.a06_2_inventory.data

import android.content.Context
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase

/**
 * Room 数据库核心类（单例模式实现）
 * 注解说明：
 * - @Database 声明数据库元信息
 *   - entities 指定关联的实体类 [Item]
 *   - version 定义数据库版本号（用于迁移控制）
 *   - exportSchema 关闭架构导出（生产环境建议开启）
 */
@Database(entities = [Item::class], version = 1, exportSchema = false)
abstract class InventoryDatabase : RoomDatabase() {

    /**
     * 获取 [ItemDao] 的抽象方法（由 Room 自动实现）
     * @return 关联的 DAO 接口实例
     */
    abstract fun itemDao(): ItemDao

    companion object {
        @Volatile
        private var Instance: InventoryDatabase? = null

        /**
         * 获取数据库实例（线程安全单例）
         * @param context 应用上下文（用于数据库构建）
         * @return 数据库单例实例
         */
        fun getDatabase(context: Context): InventoryDatabase {
            return Instance ?: synchronized(this) {
                // 使用 Room 数据库构建器创建实例
                Room.databaseBuilder(
                    context,
                    InventoryDatabase::class.java,
                    "item_database"  // 数据库文件名
                ).build().also { Instance = it }
            }
        }
    }
}
